home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MOS / COOKIEJA.I < prev    next >
Encoding:
Modula Implementation  |  1991-02-13  |  2.2 KB  |  102 lines

  1. IMPLEMENTATION MODULE CookieJar;
  2. (*$Y+,N+,L-,H+*)
  3.  
  4. FROM SYSTEM IMPORT LONGWORD, ASSEMBLER, ADDRESS;
  5.  
  6. PROCEDURE cookiePtr (): ADDRESS;
  7.   BEGIN
  8.     ASSEMBLER
  9.         CLR.L   -(A7)
  10.         MOVE    #$20,-(A7)
  11.         TRAP    #1
  12.         MOVE.L  D0,2(A7)
  13.         MOVE.L  $5A0,(A3)+      ; _p_cookies holen
  14.         TRAP    #1
  15.         ADDQ.L  #6,A7
  16.     END
  17.   END cookiePtr;
  18.   
  19. PROCEDURE findCookie (cookie: LONGWORD);
  20.   (* Rückgabe des Ptrs auf den Cookie+4 in A0,wenn D0 # 0 *)
  21.   BEGIN
  22.     ASSEMBLER
  23.         JSR     cookiePtr
  24.         MOVE.L  -(A3),A0
  25.         MOVE.L  -(A3),D1        ; cookie
  26.         MOVE.L  A0,D0
  27.         BNE     start
  28.         RTS
  29.       next
  30.         CMP.L   D0,D1
  31.         BEQ     ende
  32.         ADDQ.L  #4,A0
  33.       start
  34.         MOVE.L  (A0)+,D0
  35.         BNE     next
  36.       ende
  37.     END
  38.   END findCookie;
  39.  
  40. PROCEDURE GetCookie (cookie: LONGWORD; VAR value: LONGWORD): BOOLEAN;
  41.   BEGIN
  42.     ASSEMBLER
  43.         MOVE.L  -(A3),-(A7)     ; ADR (value)
  44.         JSR     findCookie
  45.         MOVE.L  (A7)+,A1
  46.         TST.L   D0
  47.         BEQ     false
  48.         MOVE.L  (A0),(A1)
  49.         MOVE    #1,(A3)+
  50.         RTS
  51.       false
  52.         CLR.L   (A1)
  53.         CLR.W   (A3)+
  54.     END
  55.   END GetCookie;
  56.  
  57. PROCEDURE ModifyCookie (cookie: LONGWORD; newvalue: LONGWORD): BOOLEAN;
  58.   BEGIN
  59.     ASSEMBLER
  60.         MOVE.L  -(A3),-(A7)     ; newvalue
  61.         JSR     findCookie
  62.         MOVE.L  (A7)+,D1
  63.         TST.L   D0
  64.         BEQ     false
  65.         MOVE.L  D1,(A0)
  66.         MOVE    #1,(A3)+
  67.         RTS
  68.       false
  69.         CLR.W   (A3)+
  70.     END
  71.   END ModifyCookie;
  72.  
  73.  
  74. PROCEDURE QueryCookies (with: CookieProc);
  75.   BEGIN
  76.     ASSEMBLER
  77.         JSR     cookiePtr
  78.         MOVE.L  -(A3),A0
  79.         MOVE.L  -(A3),-(A7)     ; with.link
  80.         MOVE.L  -(A3),-(A7)     ; with.adr
  81.         MOVE.L  A0,D0
  82.         BEQ     ende
  83.       next
  84.         MOVE.L  (A0)+,D0
  85.         BEQ     ende
  86.         MOVE.L  D0,(A3)+        ; cookie
  87.         MOVE.L  A0,(A3)+        ; ADR (value)
  88.         MOVE.L  (A7),A1
  89.         MOVE.L  4(A7),D2
  90.         MOVE.L  A0,-(A7)
  91.         JSR     (A1)
  92.         MOVE.L  (A7)+,A0
  93.         ADDQ.L  #4,A0
  94.         TST.W   -(A3)
  95.         BNE     next
  96.       ende
  97.         ADDQ.L  #8,A7
  98.     END
  99.   END QueryCookies;
  100.  
  101. END CookieJar.
  102.